package com.ptms.vo;

import java.util.Map;

/**
 * 统一响应结果封装类
 * @param <T> 响应数据类型
 */
public class ResultVO<T> {
    // 状态码（200-成功，400-参数错误，500-服务器错误，可根据业务扩展）
    private Integer code;
    // 提示信息（用于前端展示用户反馈）
    private String message;
    // 业务数据（成功时返回的具体数据，失败时可为null）
    private T data;

    // 1. 无参构造函数（用于空实例初始化）
    public ResultVO() {}

    // 2. 全参构造函数（用于快速创建完整响应实例）
    public ResultVO(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    // 3. Getter 方法（前端需通过该方法获取响应属性值）
    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }

    public T getData() {
        return data;
    }

    // 4. Setter 方法（用于单独修改响应属性，如手动覆盖提示信息）
    public void setCode(Integer code) {
        this.code = code;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void setData(T data) {
        this.data = data;
    }

    // -------------------------- 通用静态工具方法（修复后，适配前端响应需求） --------------------------
    /**
     * 通用成功响应（无业务数据）
     * 适用场景：登录成功、修改信息成功等无需返回数据的场景
     */
    public static <T> ResultVO<T> success() {
        return new ResultVO<>(200, "操作成功", null);
    }

    /**
     * 通用成功响应（带业务数据）
     * 适用场景：查询用户信息、获取管理员数据等需返回数据的场景（匹配前端 code=200 判定逻辑）
     */
    public static <T> ResultVO<T> success(T data) {
        return new ResultVO<>(200, "操作成功", data);
    }

    /**
     * 通用成功响应（自定义提示+业务数据）
     * 适用场景：用户信息更新成功等需自定义提示的场景（匹配前端 ElMessage 成功提示）
     */
    public static <T> ResultVO<T> success(String message, T data) {
        return new ResultVO<>(200, message, data);
    }

    /**
     * 通用失败响应（匹配前端 err.message 捕获逻辑）
     * 适用场景：参数错误、用户不存在等业务异常
     */
    public static <T> ResultVO<T> fail(Integer code, String message) {
        return new ResultVO<>(code, message, null);
    }

    // -------------------------- 教练注册专属成功方法（保留原逻辑，不修改） --------------------------
    public static <T> ResultVO<T> successCoachRegister() {
        return new ResultVO<>(200, "注册信息已提交审核！", null);
    }

    public static <T> ResultVO<T> successCoachRegister(T data) {
        return new ResultVO<>(200, "注册信息已提交审核！", data);
    }
}